package com.cn.wanxi.servlet;

import com.alibaba.fastjson.JSONObject;
import com.cn.wanxi.model.ResultModel;
import com.cn.wanxi.model.UserModel;
import com.cn.wanxi.service.UserService;
import com.cn.wanxi.service.impl.UserServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 对于平时我们写的方法，必须要有返回值
 * 返回值的目的就是为了给别人一个反馈
 * 类和类之间的关系
 * 继承，实现，依赖，组合，聚合
 * 只要把某个类当作参数进行传递，则他们之间的关系叫做依赖
 */
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    /**
     * doGet和doPost的区别？
     *
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

//        0.乱码处理
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
//        req就是前端请求后台
//        resp 响应，后台响应前端
//        我们这么拿到前端传递给后台的数据呢？
//        1.得到前端数据
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String code = req.getParameter("code");
//        System.out.println(code);
        String sessionCode = (String) req.getSession().getAttribute("vCode");

//       2. 封装对象
        UserModel userModel = new UserModel();
        userModel.setUsername(username);
        userModel.setPassword(password);
        userModel.setCode(code);
        userModel.setSessionCode(sessionCode);

//        3.调用服务逻辑层,写逻辑代码的地方
        UserService userService = new UserServiceImpl();
//        4.得到逻辑层返回数据

        ResultModel resultModel = userService.login(userModel);

//        5.将数据返回给前端
        resp.getWriter().println(JSONObject.toJSONString(resultModel));
    }
}
